src="https://maps.googleapis.com/maps/api/js?v=3.exp";
var HOST = "localhost:8080";
var map;
var directionsDisplay;
var start;
var end;

/*information sur le lieu de depart de l'utilisateur*/
var nomDepart; /*l'adresse*/
var latDepart=null;
var lngDepart=null; /*la longitude*/

/*information sur le lieu de dd'arrivée de l'utilisateur*/
var nomArrivee; /*l'adresse*/
var latArrivee=null;
var lngArrivee=null; /*la longitude*/

/*Les informations sur la station de depart*/
var nomStationDepart;
var latStationDepart;
var lngStationDepart;

/*Les informations sur la station d'arrivé*/
var nomStationArrivee;
var latStationArrivee;
var lngStationArrivee;

function initialize() {
	directionsDisplay = new google.maps.DirectionsRenderer();
    var mapOptions = {
    	zoom: 10,
    	center: new google.maps.LatLng(48.8534100,2.3488000),
    	mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById('map-canvas'),mapOptions);
    directionsDisplay.setMap(map);
}


function initializeC() {
	directionsDisplay = new google.maps.DirectionsRenderer();
    var mapOptions = {
    	zoom: 10,
    	center: new google.maps.LatLng(48.8534100,2.3488000),
    	mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById('map-canvasC'),mapOptions);
    directionsDisplay.setMap(map);
}

/*
 * @parm nom : le nom de l'adresse dont nous voulons récupérer les coord
 * */ 
function getCoor(address){
	geocoder = new google.maps.Geocoder;
	var result = "";
	geocoder.geocode({
		'address': address
	},function(results,status){
		if(status==google.maps.GeocoderStatus.OK){
			result[0] =results[0].geometry.location.lat();
			result[1] =results[0].geometry.location.lng();
			return result;
		}
		else{
			alert("Geocode of the start address was not successful for the following reason: "+status);
			return null;		
		}
	});
}


function stationForm(){
	//call();
	start=document.getElementById('AdresseDNC').value;
	end=document.getElementById('AdresseANC').value;
	
	/* on set les coordonnés du arrivee */
	var coordArrivee = getCoor(end);
	latArrivee = coordArrivee[0];
	lngArrivee = coordArrivee[1];
	/* on set les coordonnés du départ */
	if(start==""){	//si la case est vide on cherche par la position par géolocalisation
		getLocationGeolocalisation();
	}else{ 		
		var coordDepart=getCoor(start);
		latDepart = coordArrivee[0];
		lngDepart = coordDepart[1];
		callChoisirItineraire();/* on peut valider */
	}
}

function synchronusSubmitLocationForm(){
	document.locationForm.submit();
}

 
function getLocationGeolocalisation(){
	  if (navigator.geolocation){
		  navigator.geolocation.getCurrentPosition(successCallback, errorCallback);			
		}else{
		  alert("Votre navigateur ne prend pas en compte la géolocalisation HTML5");
		}
  }
function successCallback(position){
	/*On récupere les coordonnées et nous les placons dans les variables correspondentes.*/
	latDepart= position.coords.latitude;
	lngDepart = position.coords.longitude;
	
	//Nous faisons une requete a notre servlette ChoisireItineraire
	callChoisirItineraire();

};  
 
function errorCallback(error){
  switch(error.code){
    case error.PERMISSION_DENIED:
      alert("L'utilisateur n'a pas autorisé l'accès à sa position");
      break;      
    case error.POSITION_UNAVAILABLE:
      alert("L'emplacement de l'utilisateur n'a pas pu être déterminé");
      break;
    case error.TIMEOUT:
      alert("Le service n'a pas répondu à temps");
      break;
    }
};

/*Nous faisons un appel a notre servlet pour récupere notre itineraire*/
function callChoisirItineraire(){
	if(latArrivee!=null && lngArrivee!=null && latDepart!=null && lngDepart!=null){ /*On verifie que toute nos variables sont définies*/
	  // IL FAUDRA CHANGER L'URL QUAND ON AURA DEPLOYE LE PROJET
	  var url = "http://localhost:8080/BikeAppProjectV4/ChoisirItineraire?callback=recupItineraire&latDepart="
	  +latDepart+"&lngDepart="+lngDepart+"&latArrivee="+latArrivee+"&lngArrivee="+lngArrivee;
	  // create a new script element
	  var script = document.createElement('script');
	  // set the src attribute to that url
	  script.setAttribute('src', url);
	  script.setAttribute('type','text/javascript');
	  // insert the script in out page
	  document.getElementsByTagName('head')[0].appendChild(script);
	}
};

 /*Récupere l'itineraire et l'afficher*/
function recupItineraire(data){
	var divParcours= document.getElementById("parcours");
	nomStationDepart=data.station[0].name;
	latStationDepart=data.station[0].lat;
	lngStationDepart=data.station[0].lng;
	
	nomStationArrivee=data.station[1].name;
	latStationArrivee=data.station[1].lat;
	lngStationArrivee=data.station[1].lng;
	divParcours.innerHTML ='Marchez jusqua la gare:'+nomStationDepart+" et Pedalez jusqua la gare:"+nomStationArrivee;
	getThreeRoute();
	afficheDistEtDurat();
}



function stationFormGUETTO(connecte){
	//call();
	if(connecte=="oui"){
		start=document.getElementById("selectAdresseDT").value;
		end=document.getElementById("selectAdresseAT").value;
	}else{
		start=document.getElementById("AdresseDNC").value;
		end=document.getElementById("AdresseANC").value;
	}
	var geocoderA = new google.maps.Geocoder;
	var geocoderD = new google.maps.Geocoder;
	/* on set les coordonnés du arrivee */
	geocoderA.geocode({
		'address': end
	},function(results,status){
		if(status==google.maps.GeocoderStatus.OK){
			latArrivee =results[0].geometry.location.lat();
			lngArrivee  =results[0].geometry.location.lng();
			callChoisirItineraire();/* on envoyer la requete a notre servlet */
		}
		else{
			alert("Geocode of the start address was not successful for the following reason: "+status);
		}
	});
	/* on set les coordonnés du départ */
	if(start==""){	//si la case est vide on cherche par la position par géolocalisation
		getLocationGeolocalisation();
	}else{ 		
		geocoderD.geocode({
			'address': start
		},function(results,status){
			if(status==google.maps.GeocoderStatus.OK){
				latDepart =results[0].geometry.location.lat();
				lngDepart  =results[0].geometry.location.lng();
				callChoisirItineraire();/* on envoyer la requete a notre servlet */
			}
			else{
				alert("Geocode of the start address was not successful for the following reason: "+status);	
			}
		});
	}	
}



function route(latD,lngD,latA,lngA,latSD,lngSD,latSA,lngSA,mode){
	var directionsService = new google.maps.DirectionsService();
	start="("+latD.toString()+","+lngD.toString()+")";
	end="("+latA.toString()+","+lngA.toString()+")";
	var wayps=[];
	var AdresseSD="("+latSD.toString()+","+lngSD.toString()+")";
	var AdresseSA="("+latSA.toString()+","+lngSA.toString()+")";
    wayps.push({location:AdresseSD,stopover:true});	
    wayps.push({location:AdresseSA,stopover:true});
	var request = {
		origin:start,
		destination:end,
		waypoints:wayps,
		travelMode:mode
	};
	directionsService.route(request, function(response,status){
		if(status == google.maps.DirectionsStatus.OK){
			directionsDisplay.setDirections(response);
		}
	});
}

/*dessine le trajet sur la carte*/
function getThreeRoute(){
	route(latDepart,lngDepart,latArrivee,lngArrivee,latStationDepart,lngStationDepart,latStationArrivee,lngStationArrivee,google.maps.TravelMode.WALKING);
}

function calcRoute(){
	var directionsService = new google.maps.DirectionsService();
	start=document.getElementById('AdresseDNC').value;
	end=document.getElementById('AdresseANC').value;
	var request = {
		origin:start,
		destination:end,
		travelMode:google.maps.TravelMode.WALKING
	};
	directionsService.route(request, function(response,status){
		if(status == google.maps.DirectionsStatus.OK){
			directionsDisplay.setDirections(response);
		}
	});
}

function getDistEtDurat(latD,lngD,latA,lngA,mode,tag,str){
	var distanceEtDuration = document.getElementById(tag);
	distanceService = new google.maps.DirectionsService();
	distanceService.route({
		origin: "("+latD.toString()+","+lngD.toString()+")",
		destination:"("+latA.toString()+","+lngA.toString()+")",
		travelMode:mode,
	},function(results,status){
		if(status==google.maps.GeocoderStatus.OK){
			var Dis = "";
			var Dur = "";
			var route = results.routes[0];
			for(var i=0 ; i < route.legs.length ; i++){
				Dis += route.legs[i].distance.text;
				Dur += route.legs[i].duration.text;
			}
			distanceEtDuration.innerHTML = str+"Distance="+Dis+",Duration="+Dur+".";
		}
		else{
			alert("Geocode of the end address was not successful for the following reason: "+status);
		}
	});
} 

function afficheDistEtDurat(){
	getDistEtDurat(latDepart,lngDepart,latStationDepart,lngStationDepart,google.maps.TravelMode.WALKING,"distEtDurat1","De A à B: ");
	getDistEtDurat(latStationDepart,lngStationDepart,latStationArrivee,lngStationArrivee,google.maps.TravelMode.BICYCLING,"distEtDurat2","De B à C: ");
	getDistEtDurat(latStationArrivee,lngStationArrivee,latArrivee,lngArrivee,google.maps.TravelMode.WALKING,"distEtDurat3", "De C à D: ");
}




/******************************************************************************************************
 * 
 * 
 *  Fonctions de gestion des preferences
 * 
 * 
*********************************************************************/

/*
 * Va chercher la les préferences du client
 */
function rajouterPreference(nomUser){
	var preference= document.getElementById("aliasAdresse").value;
	var adressePreference= document.getElementById("adresseDansAjouterAdresse").value;
	//var nomUser = session.getAttribrute("user");  /*TODO RECUPERER LE NOM de L'utilisateur*/
	var url = "http://"+HOST+"/BikeAppProjectV4/rajouterPreference?nomUser="+nomUser+"&preference="+preference+"&adressePreference="+adressePreference;
	
	var script = document.createElement('script');
	  // set the src attribute to that url
	  script.setAttribute('src', url);
	  // insert the script in out page
	  document.getElementsByTagName('head')[0].appendChild(script);
}

/*Ouvre la page popup pour rajouter une adresse*/
function popupRajouterAdresse(){
	window.open("popupRajouterAdresse.jsp", "Rajouter Adresse", 'resizable=no, location=no, width=300, height=100, , status=no, scrollbars=no, menubar=yes');
}

/*Initialise le table tablePreference avec les informations des préferences du client*/
function initialiseTablePreference(){
	/*TODO*/
}


